﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Clases_BL;
using Capa_Entidad;
using Capa_Negocio_Interface;

namespace Capa_Negocio_Facade
{
    public class FacadeRegistrarAtencion : IFacadeRegistrarAtencion
    {
        clsAte_Atencion_DiagnosticoBL negDiagnostico = new clsAte_Atencion_DiagnosticoBL();
        clsProductoBL negProducto = new clsProductoBL();
        clsAte_Atencion_RecetaBL negRecetaDetalle = new clsAte_Atencion_RecetaBL();

        public List<ATE_ATENCION> ListarAte_Atencion()
        {
            try
            {
                return new clsAte_AtencionBL().Listar();
            }
            catch (Exception)
            {
                return null;
            }
        }


        public bool InsertarHistoriaSocial(ATE_HISTORIA_SOCIAL obj)
        {
            try
            {
                return new clsAte_Historia_SocialBL().Insertar(obj);

            }
            catch (Exception ex)
            {
                return false;
                throw ex;
            }
        }
        public bool ModificarHistoriaSocial(ATE_HISTORIA_SOCIAL obj)
        {
            try
            {
                return new clsAte_Historia_SocialBL().Modicar(obj);

            }
            catch (Exception ex)
            {
                return false;
                throw ex;
            }
        }

        public List<ATE_HISTORIA_SOCIAL> GetHistoriaSocial(int idHistoriaSocial)
        {
            try
            {
                return new clsAte_Historia_SocialBL().getHistoria(idHistoriaSocial);
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        public List<ATE_ATENCION> obtenerDatosAtencion(int idAtencion)
        {
            try
            {
                return new clsAte_AtencionBL().obtenerDatosAtencion(idAtencion);
            }
            catch (Exception)
            {
                return null;
            }
        }
        public bool EliminarAtencion(ATE_ATENCION objAtencion)
        {
            try
            {
                return new clsAte_AtencionBL().Eliminar(objAtencion);
            }
            catch (Exception)
            {

                return false;
            }

        }
        public List<GEN_ESPECIALIDAD> listarEspecialidad()
        {
            try
            {
                return new clsEspecialidadBL().listar();
            }
            catch (Exception)
            {
                return null;
            }
        }
        //public List<GEN_MEDICO> listarMedico()
        //{
        //    try
        //    {
        //        return new clsMedicoBL().listar();
        //    }
        //    catch (Exception)
        //    {
        //        return null;
        //    }
        //}
        public List<V_Medico_Especialidad> listarMedicoXEspecialidad(int? ID_Especialidad)
        {
            try
            {
                return new clsMedicoBL().listar_Medico_Filtro(ID_Especialidad);
            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<GEN_SERVICIO> listarServicio()
        {

            try
            {
                return new clsGen_ServicioBL().listar();
            }
            catch (Exception)
            {
                return null;
            }

        }
        public IEnumerable<Object> listarServicio(Int32 ID)
        {
            try
            {
                return new clsGen_ServicioBL().listarServicio(ID);

            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<GEN_SERVICIO> listarServicioXEspecialidad(int? ID_Especialidad)
        {
            try
            {
                var q = (from a in listarServicio()
                         from b in listarEspecialidad()
                         where a.ESP_ID_ESPECIALIDAD == b.ESP_ID_ESPECIALIDAD
                         && a.ESP_ID_ESPECIALIDAD == ID_Especialidad
                         select a);
                return q.ToList();
            }
            catch (Exception)
            {
                return null;
            }

        }
        public bool InsertarReceta(ATE_ATENCION_RECETA obj)
        {
            try
            {
                return new clsAte_Atencion_RecetaBL().Insertar(obj);
            }
            catch (Exception)
            {
                return false;
            }
        }
        public bool InsertarAtencion(ATE_ATENCION obj)
        {
            try
            {
                return new clsAte_AtencionBL().Insertar(obj);
            }
            catch (Exception)
            {
                return false;
            }
        }
        public ATE_ATENCION_RECETA obtenerUltimaReceta()
        {
            return new clsAte_Atencion_RecetaBL().obtenerUltimaReceta();

        }
        public List<ADM_PACIENTE> listarPaciente(string codPaciente)
        {
            try
            {
                return new clsPacienteBLcs().obtenerCodPaciente(codPaciente);
            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<ADM_PACIENTE> listarPaciente()
        {
            try
            {
                return new clsPacienteBLcs().listar();
            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<ATE_ATENCION_RECETA> listarRecetasPorCodAtencion(int idAtencion)
        {
            try
            {
                return new clsAte_Atencion_RecetaBL().listarPorCodAtencion(idAtencion);
            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<V_DETALLE_RECETA> listarDetalleRecetaPorCodAtencion(int idAtencion)
        {
            try
            {
                return new clsAte_Atencion_RecetaBL().listarDetalleRecetaPorCodAtencion(idAtencion);
            }
            catch (Exception)
            {
                return null;
            }
        }

        public List<GEN_TIPO_SERVICIO> ListarTipoServicio()
        {
            try
            {
                return new clsGen_Tipo_ServicioBL().Listar();
            }
            catch (Exception)
            {
                return null;
            }
        }
        public List<GEN_ESPECIALIDAD> listarEspecialidadPorTipoServicio(int? idTipoServicio)
        {
            try
            {
                return new clsEspecialidadBL().listarPorTipoServicio(idTipoServicio);
            }
            catch (Exception)
            {
                return null;
            }
        }
        public bool modificarAtencion(ATE_ATENCION objAtencion)
        {
            bool flagRpta = false;
            try
            {

                flagRpta = new clsAte_AtencionBL().Modificar(objAtencion);
            }
            catch (Exception)
            {
                flagRpta = false;
            }
            return flagRpta;
        }
        public bool insertarEnfermedadActual(ATE_ENFERMEDAD_ACTUAL objEnfermedadActual)
        {
            clsAte_Enfermedad_ActualBL enferemedadActual = new clsAte_Enfermedad_ActualBL();

          return  enferemedadActual.Insertar(objEnfermedadActual);
          
       
        }
        public bool modificarEnfermedadActual(ATE_ENFERMEDAD_ACTUAL objEnfermedadActual)
        {
            clsAte_Enfermedad_ActualBL enferemedadActual = new clsAte_Enfermedad_ActualBL();
            return enferemedadActual.Modificar(objEnfermedadActual);
          
         
        }
        public ATE_ATENCION obtenerUltimaAtencion()
        {
            return new clsAte_AtencionBL().obtenerUltimaAtencion();
        }
        public List<ATE_ENFERMEDAD_ACTUAL> listarEnfermedadActual(int id_atencion)
        {
            List<ATE_ENFERMEDAD_ACTUAL> listaEnfermedadActual;
            try
            {
                listaEnfermedadActual = new clsAte_Enfermedad_ActualBL().Listar(id_atencion);
            }
            catch (Exception)
            {
                listaEnfermedadActual = null;
            }
            return listaEnfermedadActual;
        }

        public IEnumerable<object> ListarProcedimientos()
        {
            return new clsGen_ProcedimientoBL().ListarProcedimientos();
        }

        public IEnumerable<object> ListarAtencionExamenes()
        {
            return new clsAte_Atencion_ExamenBL().ListarAtencionExamen(null);
        }

        public IEnumerable<object> ListarAtencionExamenes(int? idAtencion)
        {
            return new clsAte_Atencion_ExamenBL().ListarAtencionExamen(idAtencion);
        }

        public bool Insertar(List<ATE_ATENCION_EXAMEN> ListAtencionExamen)
        {
            return new clsAte_Atencion_ExamenBL().Insertar(ListAtencionExamen);
        }




        ////////REGISTRO DE TABLA  ATE_EXAMEN_ACTIVIDAD ////////




        public ATE_EXAMEN_ACTIVIDAD obtenerUltimaAtencionATE_EXAMEN_ACTIVIDAD()
        {
            clsAte_Examen_ActividadBL actividad = new clsAte_Examen_ActividadBL();
            return actividad.obtenerUltimaAtencion();
        }
        public bool InsertarATE_EXAMEN_ACTIVIDAD(ATE_EXAMEN_ACTIVIDAD obj)
        {
            clsAte_Examen_ActividadBL actividad = new clsAte_Examen_ActividadBL();
            return actividad.Insertar(obj);
        }
        public bool ModificarATE_EXAMEN_ACTIVIDAD(ATE_EXAMEN_ACTIVIDAD obj)
        {
            clsAte_Examen_ActividadBL actividad = new clsAte_Examen_ActividadBL();
            return actividad.Modificar(obj);
        }
        public bool EliminarATE_EXAMEN_ACTIVIDAD(ATE_EXAMEN_ACTIVIDAD obj)
        {
            clsAte_Examen_ActividadBL actividad = new clsAte_Examen_ActividadBL();
            return actividad.Eliminar(obj);
        }
        public List<ATE_EXAMEN_ACTIVIDAD> ListarATE_EXAMEN_ACTIVIDAD(int id_atencion)
        {
            clsAte_Examen_ActividadBL actividad = new clsAte_Examen_ActividadBL();
            return actividad.Listar(id_atencion);

        }

        ////////REGISTRO DE TABLA  ATE_ATENCION_DIAGNOSTICO ////////

        public bool InsertarAtencionDiagnostico(ATE_ATENCION_DIAGNOSTICO Obj)
        {
            return negDiagnostico.Insertar(Obj);

        }

        public bool ModificarAtencionDiagnostico(ATE_ATENCION_DIAGNOSTICO obj)
        {
            return negDiagnostico.Modificar(obj);
        }

        public bool EliminarAtencionDiagnostico(ATE_ATENCION_DIAGNOSTICO obj)
        {
            return negDiagnostico.Eliminar(obj);
        }

        public int ObtenerIdUltimoAtencionDiagnostico()
        {
            return negDiagnostico.ObtenerIdUltimo();
        }

        ////////REGISTRO DE TABLA PRODUCTO////////

        public bool InsertarProductos(CYF_PRODUCTO Obj)
        {
            return negProducto.Insertar(Obj);
        }
        public bool ModificarProductos(CYF_PRODUCTO obj)
        {
            return negProducto.Modificar(obj);
        }
        public bool EliminarProductos(CYF_PRODUCTO obj)
        {
            return negProducto.Eliminar(obj);
        }
        public List<CYF_PRODUCTO> ListarProductos()
        {
            return negProducto.Listar();
        }
        ////////REGISTRO DE TABLA ATE_DETALLE_RECETA////////

        public bool InsertarDetalleReceta(ATE_DETALLE_RECETA Obj)
        {
            return negRecetaDetalle.InsertarDetalleReceta(Obj);
        }
        public List<ATE_DETALLE_RECETA> listarDetalleReceta()
        {
            return negRecetaDetalle.listarDetalleReceta();
        }

        public int ObtenerIdUltimoReceta()
        {
            return negRecetaDetalle.ObtenerIdUltimo();
        }
        public IEnumerable<object> ListarCitasPendientes() {
            return new clsAte_AtencionBL().ListarCitasPendientes();
        }
        public bool ActualizarEstadoCita(int IdCita, int estado) {
            clsAdmCitaBL negcita=new clsAdmCitaBL();
            return negcita.ActualizarEstadoCita(IdCita, estado); 
        }
        public List<V_LISTA_CITAS> ListaCitaAtencion(int IdAtencion) {
            clsAdmCitaBL negcita = new clsAdmCitaBL();
            return negcita.ListaCitaAtencion(IdAtencion); 
        }
       public List<V_LISTA_HISTORIAL_PACIENTE> ListarNumHistorial(int IdPaciente)
       {
           clsAte_AtencionBL negcita = new clsAte_AtencionBL();
           return negcita.ListarNumHistorial(IdPaciente); 
        }
       public List<ATE_ATENCION> ListarAtencionxpaciente(int IdPaciente) {
           clsAte_AtencionBL negcita = new clsAte_AtencionBL();
           return negcita.ListarAtencionxpaciente(IdPaciente); 
       }

    }
}
